// 指定当前类所属的包路径，用于组织项目结构
package com.example.springboot.service.impl;
// 导入所需的类和工具包
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.springboot.entity.Notice;
import com.example.springboot.mapper.NoticeMapper;
import com.example.springboot.service.NoticeService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

// @Service：声明当前类是 Spring 管理的服务层组件，自动注册到 Spring 容器中
@Service
// 继承 ServiceImpl 实现服务层接口，泛型参数为 Mapper 接口和实体类
public class NoticeServiceImpl extends ServiceImpl<NoticeMapper, Notice> implements NoticeService {


    /**
     * 注入 DAO 层对象（通过 J2EE 标准的 @Resource 注解实现依赖注入）
     * @Resource 默认为按名称注入，这里注入 NoticeMapper 接口的实现类
     */
    @Resource
    private NoticeMapper noticeMapper;

    /**
     * 新增公告方法
     * @param notice 待新增的公告实体对象
     * @return 影响的行数（成功返回 1，失败返回 0）
     */
    @Override// 标识重写父类方法
    public int addNewNotice(Notice notice) {
        // 执行插入操作（调用 MyBatis-Plus 基础 Mapper 的插入方法）
        int insert = noticeMapper.insert(notice);
        return insert;
    }

    /**
     * 查询公告（按标题模糊搜索）
     * @param pageNum 当前页码
     * @param pageSize 每页显示记录数
     * @param search 搜索关键词（公告标题）
     * @return 分页结果对象（包含总记录数和当前页数据）
     */
    @Override
    public Page find(Integer pageNum, Integer pageSize, String search) {
        // 创建分页对象（传入页码和每页大小）
        Page page = new Page<>(pageNum, pageSize);
        // 创建查询条件构造器
        QueryWrapper<Notice> qw = new QueryWrapper<>();
        // 添加条件：标题（title）模糊匹配搜索词
        qw.like("title", search);
        // 执行分页查询（调用 Mapper 的分页查询方法）
        Page noticePage = noticeMapper.selectPage(page, qw);
        return noticePage;
    }

    /**
     * 更新公告（根据 ID 更新）
     * @param notice 包含更新后数据的公告实体对象（需包含 ID）
     * @return 影响的行数（成功返回 1，失败返回 0）
     */
    @Override
    public int updateNewNotice(Notice notice) {
        // 执行更新操作（调用 MyBatis-Plus 基础 Mapper 的根据 ID 更新方法）
        int i = noticeMapper.updateById(notice);
        return i;
    }

    /**
     * 删除公告（根据公告 ID 删除）
     * @param id 待删除公告的 ID
     * @return 影响的行数（成功返回 1，失败返回 0）
     */
    @Override
    public int deleteNotice(Integer id) {
        // 执行删除操作（调用 MyBatis-Plus 基础 Mapper 的根据 ID 删除方法）
        int i = noticeMapper.deleteById(id);
        return i;
    }

    /**
     * 首页公告展示（按发布时间倒序获取所有公告）
     * @return 公告列表（List<Notice>）
     */
    @Override
    public List<?> homePageNotice() {
        // 创建查询条件构造器
        QueryWrapper<Notice> qw = new QueryWrapper<>();
        // 添加排序条件：按发布时间（release_time）倒序排列
        qw.orderByDesc("release_time");
        // 执行查询（获取所有符合条件的公告，未分页）
        List<Notice> noticeList = noticeMapper.selectList(qw);
        // 返回公告列表（使用通配符 List<?> 兼容可能的类型转换需求）
        return noticeList;
    }
}
